package org.springframework.security.core.session;

import java.util.List;

/**
 * @author Dillon
 * @date 2024/7/14
 * @slogan 致敬大师 致敬未来的你
 * @desc session注册接口 控制session并发等 CSRF等
 */
public interface SessionRegistry {

	/**
	 * 获取所有的认证主体
	 *
	 * @return Principals
	 */
	List<Object> getAllPrincipals();

	/**
	 * 获取所有的session 封装对象
	 *
	 * @param principal              认证主体
	 * @param includeExpiredSessions 过期session是否获取
	 * @return List<SessionInformation>
	 */
	List<SessionInformation> getAllSessions(Object principal, boolean includeExpiredSessions);

	/**
	 * 获取session封装对象
	 *
	 * @param sessionId sessionID
	 * @return SessionInformation
	 */
	SessionInformation getSessionInformation(String sessionId);

	/**
	 * 刷新session登录时间
	 *
	 * @param sessionId sessionID
	 */
	void refreshLastRequest(String sessionId);

	/**
	 * 注册一个新的sessionInformation
	 *
	 * @param sessionId sessionID
	 * @param principal session主体
	 */
	void registerNewSession(String sessionId, Object principal);

	/**
	 * 移除session标记主体信息
	 *
	 * @param sessionId sessionID
	 */
	void removeSessionInformation(String sessionId);

}
